/*
 * compara-DATApkts.h
 *
 *  Created on: 05/07/2011
 *      Author: McEdd
 */

#ifndef COMPARADATAPKTS_H_
#define COMPARADATAPKTS_H_

#include <stdlib.h>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

ofstream resDATApOUT("datos/resultadosDATApkts.txt");//estadisticas

int compara(int &nDtaPerd, int &nDta, int &nRetPerd, int &nRet) {

	int flag = 1;

	int data2, antB = 0;
	bool primero;
	float tiempo, antT = 0.0;

	system(
			"awk -f analizarDATA/ordenar-DATApkts.awk datos/servidor-DATApkts.txt > datos/data2.txt");

	nDtaPerd = 0;//data perdidos
	nDta = 0;//tatal data
	nRetPerd = 0;//perdidos retransmitidos
	nRet = 0;//total retransmitidos

	ifstream in2("datos/data2.txt");//el q tiene la secuencia de traza completa
	ofstream out1("datos/datos1graficaDATApkts.txt");//entregados
	ofstream out2("datos/datos2graficaDATApkts.txt");//perdidos
	ofstream out3("datos/datos3graficaDATApkts.txt");//Retransmitidos entregados
	ofstream out4("datos/datos4graficaDATApkts.txt");//Retransmitidos perdidos

	primero = true;
	in2 >> tiempo >> data2;
	antB = data2;
	antT = tiempo;

	//while(!in2.eof()){
	while (in2 >> tiempo >> data2) {

		//in2>>tiempo>>data2;

		if (primero == true) {
			if (data2 == antB) {//data perdida
				out2 << antT << "\t1.1" << endl;//indicar data perdido
				nDtaPerd++;
				primero = false;
			} else {//data entregada
				out1 << antT << "\t1" << endl;//indicar data entregado
				primero = true;
			}
			nDta++;
		} else {
			if (data2 == antB) {//Retransmitida perdida
				out4 << antT << "\t0.9" << endl;//indicar data perdido
				nRetPerd++;
				primero = false;
			} else {//Retransmitida entregada
				out3 << antT << "\t0.8" << endl;//indicar data entregado
				primero = true;
			}
			nRet++;
		}
		antB = data2;
		antT = tiempo;
	}

	float porcent;
	if (nDta != 0) {
		porcent = (nDtaPerd * 1.0 / nDta) * 100.0;
	} else {
		//out1 << 0 << "\t0" << endl;
		//out2 << 0 << "\t0" << endl;
		porcent = 0.0;
		flag = 0;
	}
	resDATApOUT << "\t\t" << nDtaPerd << " DATApkts perdidos: " << porcent
			<< "% " << "de " << nDta << endl;

	if (nRet != 0) {
		porcent = (nRetPerd * 1.0 / nRet) * 100.0;
	} else {
		//out3 << 0 << "\t0" << endl;
		//out4 << 0 << "\t0" << endl;
		porcent = 0.0;
		flag = -1;
	}
	resDATApOUT << "\t\t" << nRetPerd << " DATApkts Retransmitidos perdidos: "
			<< porcent << "% " << "de " << nRet << endl;

	in2.close();
	out1.close();
	out2.close();
	out3.close();
	out4.close();

	return flag;
}

#endif /* COMPARADATAPKTS_H_ */
